#ifndef CELLNUMBER_H_
#define CELLNUMBER_H_

#include <vector>

namespace catan
{

class CellNumber
{
public:
	enum Enum_CellNumber { N_SEA = 0, N2 = 2, N3 = 3, N4 = 4, N5 = 5, N6 = 6, N7_DESERT = 7, N8 = 8, N9 = 9, N10 = 10, N11 = 11, N12 = 12 };
	
	static const std::vector<Enum_CellNumber> &getVectorOfPossibleEnumValues();
	static const std::vector<Enum_CellNumber> &getVectorOfNonDesertLandEnumValues();
	static bool canInit(Enum_CellNumber enumCellNumber);
	
	explicit CellNumber(Enum_CellNumber enumCellNumber);
	Enum_CellNumber getEnum() const;
	bool operator==(const CellNumber &other) const;
	bool operator<(const CellNumber &other) const;
	CellNumber& operator=(const CellNumber& other);
	
private:
	static std::vector<Enum_CellNumber> vectorOfPossibleEnumValues;
	static std::vector<Enum_CellNumber> vectorOfNonDesertLandEnumValues;
	
	Enum_CellNumber enumCellNumber;
};

static CellNumber nSea(CellNumber::N_SEA), n2(CellNumber::N2), n3(CellNumber::N3), n4(CellNumber::N4), n5(CellNumber::N5), n6(CellNumber::N6), n7_Desert(CellNumber::N7_DESERT), n8(CellNumber::N8), n9(CellNumber::N9), n10(CellNumber::N10), n11(CellNumber::N11), n12(CellNumber::N12);

}

#endif /*CELLNUMBER_H_*/
